package org.mirrentools.attendance.console.service;

import org.mirrentools.attendance.console.service.impl.SecurityHandlerAdminImpl;
import org.mirrentools.attendance.console.service.impl.SecurityHandlerImpl;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.ext.jdbc.JDBCClient;
import io.vertx.ext.web.RoutingContext;

import java.util.Map;

/**
 * 权限认证
 *
 * @author <a href="http://szmirren.com">Mirren</a>
 */
public interface SecurityHandler {

  /**
   * 创建一个默认的实例
   *
   * @param filterMap 过滤的名单
   * @param jdbcPool  数据库连接池
   * @return
   */
  static SecurityHandler create(Vertx vertx, Map<String, Boolean> filterMap, JDBCClient jdbcPool) {
    return new SecurityHandlerImpl(vertx, filterMap, jdbcPool);
  }
  /**
   * 创建一个管理员版的实例
   *
   * @param filterMap 过滤的名单
   * @param jdbcPool  数据库连接池
   * @return
   */
  static SecurityHandler createAdmin(Vertx vertx, Map<String, Boolean> filterMap, JDBCClient jdbcPool) {
    return new SecurityHandlerAdminImpl(vertx, filterMap, jdbcPool);
  }

  /**
   * 权限认证
   *
   * @param rct
   */
  void authToken(RoutingContext rct);

  /**
   * 获取用户的token
   *
   * @param userId
   * @param handler
   */
  void getToken(String userId, Handler<AsyncResult<String>> handler);

}
